//使用localStorage方法，调用浏览器内置小型数据库做数据缓存
function setItem(name,itme) {
  localStorage.setItem(name,JSON.stringify(itme))
}
function getItem(name) {
  return JSON.parse(localStorage.getItem(name) || '[]')
}
export default {
  //state数据容器类必到vue中就是data
  state:{
    //存放购物车页面商品数据的数组
    cart:getItem('cart'),
    //存放被选中计算商品总价的商品数据的数组
    buy:getItem('buy')
  },
  //都是方法容器，类比到vue中就是methods
  //mutations是同步方法可以对state里面数据同时读取和写入，对内的存储方法；actions是异步方法只能对数据进行读取，对外的读取方法
  mutations:{
    //对内存储数据的方法 -》将获取到的商品数据存入缓存数据库
    addShopcart(state,goodsInfo){
      //用来判断购物车中有没有相同的商品
      var flag=false
      //用数组的some方法去循环数组，判断商品是否已经存在于购物车中
      state.cart.some(item =>{
        //根据商品id进行判断，如果购物车中的商品id等于传进来的商品goodsInfo的id，则说明商品已经在购物车中
        if (item.id=== goodsInfo.id){
          //只需要对应商品的数量count做叠加即可
          item.count += parseInt(goodsInfo.count)
          flag=true
          return true
        }
      })
      //如果flag为false则说明购物车中没有对应商品，将商品所有数据都存放在购物车数组中

      if (flag===false){
        //将加入的商品数据添加到已有的购物车数组中
        state.cart.push(goodsInfo)
        //再将购物车数据存入缓存数据库
        setItem('cart',state.cart)
      }
    },
    updateGoodsSelected(state,goodsInfo){
      state.cart.some(item => {
        if (parseInt(item.id)===parseInt(goodsInfo.id)){
          item.select=goodsInfo.selected
        }
      })

    },
    updateGoodsInfo(state,goodsInfo){
      state.cart.some(item =>{
        if(parseInt(item.id)===parseInt(goodsInfo.id)){
          item.count=parseInt(goodsInfo.count)
          return true
        }
      })
      setItem('cart',state.cart)
    }
  },
  actions:{},
  //getters是计算属性，类比到vue中就是computed
  getters:{
    //判断商品有没有被单选框选中,如果被选中了，就从原数组中提取到临时数组goods中，等待计算选中商品的总价
    getGoodsSelected(state){
      var goods={}
      state.cart.forEach(item => {
        goods[item.id]=item.selected
      })
      return goods
    },
    getSelectedCount(state){
      var count=0
      state.cart.forEach(item=>{
        if (item.selected){
          count +=item.count
        }
      })
      return count
    },
    getSelectedGoods(state){
      var goods={}
      state.cart.forEach(item=>{
        if (item.selected){
          goods[item.id]=item
        }
      })
      return goods
    }
  },
  namespaced:true

}
